package main

import "fmt"

func main() {
	var array1 [5]int
	array2 := [3]int{1, 2, 3}
	array3 := [...]int{2, 4, 5}

	var grid [4][5]int

	fmt.Println(array1, array2, array3)
	fmt.Println(grid)

	// 遍历数组 一般不用这样
	for i := 0; i < len(array3); i ++ {
		fmt.Println(array3[i])
		
	}

	// 使用这个
	for i := range array3 {
		fmt.Println(array3[i])
	}

	for i, v := range array3 {
		fmt.Println(i, v)
	}

	for _, v := range array3 {
		fmt.Println(v)
	}

	sliceArray()
}

func printArray(array [3]int)  {

}

func updateSlice(s []int) {
	s[0] = 100
}

// 切片操作
func sliceArray() {
	array := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
	fmt.Println("array[2:6]=", array[2:6])
	fmt.Println("array[:6]=", array[:6])

	s1 := array[2:]
	s2 := array[:]
	fmt.Println("s1=", s1)
	fmt.Println("array[:]=", s2)

	fmt.Println("after update s1")
	updateSlice(s1)
	fmt.Println(s1)
	fmt.Println(s2)

	// 切片的扩展
	s3 := append(s1, 120)
	fmt.Println("s3=", s3)
	fmt.Println("s1=", s1)

	// 定义
	var s []int
	for i := 0; i < 10; i++ {
		s = append(s, 2 *i + 1)
		printS(s)
	}

	s5 := []int{2, 3, 4, 5}
	fmt.Println(s5)
	s6 := make([]int, 10)
	fmt.Println(s6)

	fmt.Println("copy slice")
	copy(s6, s5)
	fmt.Println(s6)

	// 删除元素
	fmt.Println("delete value")

	s6 = append(s6[:2], s6[3:]...)

	fmt.Println(s6)

	// 删除第一个

	s7 := s6[1:]
	s8 := s6[:len(s6) - 1]
	fmt.Println(s7)
	fmt.Println(s8)
}

func printS(s []int) {
	fmt.Println(s)
	fmt.Printf("s length is:%d, s cap is: %d\n", len(s), cap(s))
}

